package cn.iocoder.yudao.module.book.service.community;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.book.controller.app.community.vo.CommunityPostCreateReqVO;
import cn.iocoder.yudao.module.book.controller.app.community.vo.CommunityPostRespVO;
import cn.iocoder.yudao.module.book.dal.dataobject.community.CommunityPostsDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 社区动态 Service 接口
 *
 * @author system
 */
public interface CommunityPostsService {

    /**
     * 创建动态
     *
     * @param createReqVO 创建信息
     * @param userId 用户ID
     * @return 动态ID
     */
    Long createPost(@Valid CommunityPostCreateReqVO createReqVO, Integer userId);

    /**
     * 删除动态
     *
     * @param postId 动态ID
     * @param userId 用户ID
     */
    void deletePost(Long postId, Integer userId);

    /**
     * 获得动态详情
     *
     * @param postId 动态ID
     * @param userId 当前用户ID
     * @return 动态详情
     */
    CommunityPostRespVO getPostDetail(Long postId, Integer userId);

    /**
     * 获得动态分页列表
     *
     * @param category 分类
     * @param page 页码
     * @param pageSize 每页数量
     * @param userId 当前用户ID
     * @param targetUserId 目标用户ID（查看某用户的动态）
     * @param topicId 话题ID
     * @return 动态分页列表
     */
    PageResult<CommunityPostRespVO> getPostsPage(String category, Integer page, Integer pageSize, 
                                                Integer userId, Integer targetUserId, Long topicId);

    /**
     * 搜索动态
     *
     * @param keyword 关键词
     * @param category 分类
     * @param page 页码
     * @param pageSize 每页数量
     * @param userId 当前用户ID
     * @return 动态列表
     */
    PageResult<CommunityPostRespVO> searchPosts(String keyword, String category, Integer page, 
                                               Integer pageSize, Integer userId);

    /**
     * 点赞动态
     *
     * @param postId 动态ID
     * @param userId 用户ID
     * @return 点赞数
     */
    Integer likePost(Long postId, Integer userId);

    /**
     * 取消点赞动态
     *
     * @param postId 动态ID
     * @param userId 用户ID
     * @return 点赞数
     */
    Integer unlikePost(Long postId, Integer userId);

    /**
     * 分享动态
     *
     * @param postId 动态ID
     * @param userId 用户ID
     * @return 分享数
     */
    Integer sharePost(Long postId, Integer userId);

}
